//
//  HYtabBar.swift
//  WeiBo
//
//  Created by crazyfish on 16/3/10.
//  Copyright © 2016年 crazyfish. All rights reserved.
//

import UIKit

//tabbar只能通过代码初始化
class HYtabBar: UITabBar {

    var composeButtonClikclosure:(()->())?
    
    //如果我们重写initwithframe,意味着当前空间是通知代码创建的,里面有添加子控件等特殊逻辑,如果我们并没有重写initwithcoder方法的话,但别人在使用我们控件的话,是执行不到添加子控件等头特殊逻辑,解决方式有两种,
    //1.直接在里面抛错
    //2.把initwithFrame里面的逻辑在initwithcoder里面实现一份
    //用代码加载视图会调用这个方法,通过Xib初始化时不会调用此方法?????
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        //设置视图
        
        setupUI()
    }
    
    //设置视图
    private func setupUI(){
        
        //添加子控件
        addSubview(composeButton)
    }
   
    //从xib/sb里面加载视图会调用这个方法,通过代码创建是不会调用这个方法
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //懒加载控件
    
    private lazy var composeButton: UIButton = {
    
        let button = UIButton()
        
        //添加button的点击事件
        button.addTarget(self, action: "composeButtonClik", forControlEvents: .TouchUpInside)
        
        //设置不同状态下的背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Highlighted)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        
        //设置按钮大小
        button.sizeToFit()
    
        return button
        
    }()
    
    /**
     撰写按钮的点击事件.这个方法需要抛出去
     用户和硬件交互的方法如果使用private修饰的话前面必须加上@objc
     使用@objc修饰此私有方法,其在于告诉系统方法使用Object-C的基于运行时的机制(KVC以及动态派发)
     定义可选协议的时候也必须使用@objc修饰
     */
   @objc private func composeButtonClik(){
        
        //弹出控制器的方法要在控制器里面完成,视图view没有弹出控制器的功能.
        //所以要把这个方法抛出去
        composeButtonClikclosure?()
    }
    
    override func layoutSubviews() {
       
        super.layoutSubviews()
        
        //调整加号按钮的位置,调整其他按钮的位置和宽度
        
           var index = 0
        //遍历子控件
        for value in subviews{
            
            //获取uitabbarbutton进行设置frame
            
            let itemW = self.frame.width / 5
            
            if value.isKindOfClass(NSClassFromString("UITabBarButton")!){
            
               let x = CGFloat(index) * itemW
                
               value.frame.size.width = itemW
                
               value.frame.origin.x = x
                
               index++
                
                //如果是第三个按钮跳过设置,因为是加号按钮占位的
                
                if index == 2 {
                    
                    index++
                    
                }
         }
        
        
    }
        
        //设置加号按钮的位置
        
        composeButton.center = CGPointMake(self.center.x, self.frame.height * 0.5)
        
    }

}
